La définition de tableaux i.e. vecteurs, matrices, hypermatrices est un élément essentiel du Julia.
Julia ne possède qu'un seul type de tableau : Array on peut définir sont nombre d'entrées (1 entrée= 1 dimension ...) et sont contenu de façon assez générale (Un tableau peut contenir des matrices à chaque élément...
Une particularité est que les indices de tableaux commencent à 1, et l'acces aux éléments se fera à l'aide de '[' ’]' et non '(' ')' qui est réservé aux fonctions.
Avant de rentrer dans la construction et manipulation de tabelau regardons une autre classe
Julia possède un Type particulier fait à l'aide du ":"
In [1]:
a=1:5
Out[1]:
In [2]:
typeof(a)
Out[2]:
In [3]:
b=0:0.5:2
Out[3]:
In [4]:
typeof(b)
Out[4]:
In [5]:
c=0:1//3:3
Out[5]:
In [6]:
typeof(c)
Out[6]:
Ce type "formel" permet d'avoir une définition et une méthode associée sans stocker l'ensemble des valeurs. Attention celui-ci peut être vide :
In [7]:
d=1:0 # itérateur formel mais correspond à un ensemble vide de valeurs
Out[7]:
In [8]:
d=[d]
Out[8]:
In [9]:
a=1:5
aa=[a]
Out[9]:
In [10]:
typeof(aa)
Out[10]:
La réponse est de la forme Array{Type,dim} un tableau de Type à dim entrées (1 pour vecteur, 2 pour matrices ...)
A remarquer :
In [11]:
aa[1]
Out[11]:
In [12]:
aa[end] # pour accèder au dernier élément
Out[12]:
In [13]:
aa[end-2:end]=1; println(aa)
Les crochets permettent la construction explicite de tableaux (ou leur concaténation)
In [14]:
A=[1 2 ; 3 4] # {espace} = séparateur de colonne {"," ou ";"} = séparateur de ligne
Out[14]:
In [15]:
AA=[A A] # concaténation par block
Out[15]:
In [16]:
AA=[A , A]
Out[16]:
In [17]:
AA=[A ; A]
Out[17]:
On peut accéder à tout ou partie d'un tableau à l'aide de 2 indices
In [18]:
A[2,1]
Out[18]:
In [19]:
A[2,:]
Out[19]:
In [20]:
A[end,end]
Out[20]:
In [21]:
B=[1,2,3,4]
Out[21]:
In [22]:
B=[1;2;3;4]
Out[22]:
A noter que l'on peut faire des tableaux de tout type voir de les mélanger (Any)
In [23]:
a=["un";"deux"]
Out[23]:
In [24]:
b=[1>2,true,false]
Out[24]:
In [25]:
c=["un"; 2 ; true]
Out[25]:
Le crochet [ ] permet également la construction rapide de matrice ou tableau comme le montre l'exemple si dessous pour construire une matrice de VanderMonde
$$ V_{i,j}=x_i^{j-1}$$
In [26]:
x=0:0.2:1;
V=[ x[i]^(j-1) for i=1:6, j=1:6] # ligne et colonne
Out[26]:
In [27]:
D=[ u*v for u=1:0.5:3, v=1:0.5:4]
Out[27]:
In [28]:
size(A)
Out[28]:
In [29]:
det(A)
Out[29]:
In [30]:
trace(A)
Out[30]:
In [31]:
eigvals(A)
Out[31]:
In [32]:
A=[1 2;3 4];b=[2 ; 3]; #résolution du système Ax=b
x=A\b
Out[32]:
L'usage des fonction scientifiques se fait termes à termes pour l'ensemble des valeurs du tableau (sauf pour les fonctions matricielles comme expm
, logm
...). L'usage des opérations +
,-
,*</code>,^
,/
et \
(résolution) est disponible à condition de respecter les contraintes de dimension (multiplication matricielle par exemple). Sont ajouté des opérations termes à termes .\*
,.^
,./
et .\
toujours avec une contrainte de dimensions compatibles.
In [33]:
exp(A)
Out[33]:
In [34]:
expm(A) # expoentielle matricielle
Out[34]:
De plus les tableaux possèdes des opérations de multiplication, division, puissance termes à termes
In [35]:
A^2 #Multiplication Matricielle
Out[35]:
In [36]:
A.^2 #Multiplication terme à terme
Out[36]:
In [37]:
A.//[2 3 ; 4 5] #Division terme à terme ici en fraction rationnelles
Out[37]:
In [38]:
a=linspace(0,1,3) #linspace(début,fin,nombre_éléments)
Out[38]:
In [39]:
A=ones(3)
Out[39]:
In [40]:
B=randn(5) # loi normale centrée de variance 1
Out[40]:
In [41]:
B=[ones(3,2) zeros(3,2)] # concaténation de tableaux
Out[41]:
In [42]:
B=[ones(3,2), zeros(3,2)] # , ou ; jouent le rôle de retour à la ligne
Out[42]:
In [43]:
C=eye(3,3)
Out[43]:
In [44]:
diagm(1:4)+diagm(5:7,1) # diagm à partir d'un vecteur cré une matrice
Out[44]:
In [45]:
diag(C) # extraction d'une diagonale
Out[45]:
In [46]:
A=spzeros(3,3)
Out[46]:
In [47]:
A=spdiagm(1:3)
Out[47]:
In [48]:
A=A+spdiagm(1:2,1,3,3)
Out[48]:
In [49]:
full(A) # pour passer à une matrice pleine
Out[49]:
In [50]:
sparse(eye(4,4)) # pour rendre sparse une matrice "full"
Out[50]:
In [51]:
det(A)
Out[51]: